package com.hybs.controller;/*
 * @author: Hayabusa
 * @date: 2021/9/14 23:48
 * @Description:调用商品
 * @Email:2682557218@qq.com
 */


import com.hayabusa.pojo.Product;
import com.hayabusa.clients.ProductClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@RestController
@RequestMapping("/order")
public class OrderController {
    /**
     * 参数:商品id
     * 通过订单系统，调用商品服务根据id查询商品信息
     * 1.需要配置商品对象
     * 2.需要商品服务
     *   使用java中的urlConnection,httpClient,okhttp来通过访问http连接拿到json对象
     *   也可以使用spring提供的RestTemplate来访问
     * @param id
     * @return
     */
//注入RestTemplate对象,用之前需要创建一个对象交给容器管理
    @Autowired
    RestTemplate restTemplate;
//    注入feign客户端
    @Autowired
ProductClient productClient;


//    @RequestMapping(value = "buy/{id}",method = RequestMethod.GET)
//    public Product findById(@PathVariable Long id){
//        Product product=null;
//        product=restTemplate.getForObject("http://127.0.0.1:9001/product/"+id,Product.class);
//
//        return product;
//
//        /**存在问题
//         * 1.路径写的太多太死，耦合太高
//         *
//         * 2.微服务的集群，负载均衡难以解决
//         *
//         * 解决方案：
//         * 1.加入API网关
//         *
//         * 2.配置的统一管理
//         *
//         * 3.链路追踪，方便定位日志，定位可能出现的问题
//         *
//         *
//         */
//
//
//    }
    /**
     * 注入DiscoveryClient:
     * 通过订单系统，调用商品服务根据id查询商品信息
     *springcloud提供的获取元数据的工具类
     * 调用方法获取服务的元数据信息
     */
    @Autowired
    private DiscoveryClient discoveryClient;
//    @Autowired
//    private DiscoveryClient discoveryClient;
//    @RequestMapping(value = "buy/{id}",method = RequestMethod.GET)
//    public Product findById(@PathVariable Long id){
//        Product product=null;
////        调用discoveyClient的方法
//        List<ServiceInstance> instances = discoveryClient.getInstances("product_service");
//        ServiceInstance instance;
////        for (ServiceInstance instance:instances){
////            instance.getPort();
////        }
//        instance=instances.get(0);
////        根据元数据中的主机地址和端口号拼接请求未付的url。
//
//        product=restTemplate.getForObject("http://"+instance.getHost()+":"+instance.getPort()+"/product/"+id,Product.class);
//
//        return product;
//
//
//
//
//    }

    /**
     * 基于ribbon的形式调用远程微服务
     * 1.使用@LoadBalanced声明RestTemplate
     * 2.使用服务名称替换ip地址
     *
     */


//    @RequestMapping(value = "buy/{id}",method = RequestMethod.GET)
//    public Product findById(@PathVariable Long id){
//        Product product=null;
//
//
//        product=restTemplate.getForObject("http://product-service/product/"+id,Product.class);
//
//        return product;
//
//
//
//
//    }

    /**
     *
     * @param id 产品编号
     * @return 产品信息
     */
    @RequestMapping(value = "buy/{id}",method = RequestMethod.GET)
    public Product findById(@PathVariable("id") Long id){
        Product product=null;


        product=productClient.findById(id);

        return product;




    }

}
